<?php

/**
 * Controller is the customized base controller class.
 * All controller classes for this application should extend from this base class.
 */
class Controller extends CController {

    /**
     * @var string the default layout for the controller view. Defaults to '//layouts/column1',
     * meaning using a single column layout. See 'protected/views/layouts/column1.php'.
     */
    public static $pageData = null;
    public $layout = '//layouts/main';
    public static $ratingItems = array('brand' => 'Бренд', 'model' => 'Модель', 'service' => 'Услуга', 'actions' => 'Акции', 'news' => 'Новости', 'info' => 'Инфостраница');

    /**
     * @var array context menu items. This property will be assigned to {@link CMenu::items}.
     */
    public $mainmenu = [
        'Главная' => '',
        'Страницы' => [
            'Управление страницами' => 'page/admin',
            'Создание страниц' => 'page/create',
        ],
        'Категории' => [
            'Управление категориями' => 'categories/admin',
            'Создание категории' => 'categories/create',
        ],
        'Бренды и модели' => [
            'Управление БиМ' => 'brand/admin',
            'Создание БиМ' => 'brand/create',
            'Обновить Яндекс.Острова' => 'brand/yaupdate',
        ],
        'Отзывы' => [
            'Управление отзывами' => 'reviews/admin',
            'Добавить отзыв' => 'reviews/create',
            'Добавить аудио' => 'audioReviews/create',
            'Менеджер аудио' => 'audioReviews/admin',
        ],
        'Услуги' => [
            'Управление услугами' => 'services/admin',
            'Создание услуг' => 'services/create',
            'Привязка услуг' => 'model2serv/admin',
            'Копия' => 'model2serv/copy'
        ],
        'Пользователи' => [
            'Управление пользователями' => 'users/admin',
        ],
        'Утилиты' =>
        [
            'Импорт/экспорт' => 'imex/index',
            'Парсер' => 'yandexParser/index',
            'Объединение моделей' => 'union/index',
            'Новые модели' => 'newModels/admin',
        ],
        'Вопросы и ответы' =>
        [
            'Вопросы и ответы' => 'faq/admin',
            'Комментарии к моделям' => 'comment/admin',
            'Создание' => 'faq/create',
        ],
        'Блоки сайта' =>
        [
            'Менеджер блока' => 'blocks/admin',
            'Создание блока' => 'blocks/create',
        ],
        'Мета теги' =>
        [
            'Менеджер тегов' => 'metas/admin',
            'Создание тегов' => 'metas/create',
        ],
        'Сео cсылки' => [
            'Управление' => 'seolinks/admin',
            'Создание' => 'seolinks/create',
        ],
        'Отправленные с сайта онлайн заявки' => [
            'Управление' => 'clarisHistory/admin',
        ],
        'Онлайн оплаты' => [
            'Управление' => 'payments/admin',
        ],
        'Курс валюты' => [
            'Управление' => 'payments/currency',
        ]
    ];
    public $menu = array();

    /**
     * @var array the breadcrumbs of the current page. The value of this property will
     * be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}
     * for more details on how to specify this property.
     */
    public $breadcrumbs = array();
    public $value = 0;
    public $ips = array('127.0.0.1', '94.158.53.254', '178.63.159.81', '176.8.130.167', '37.203.16.24');

//	public function filters() {		
//		return array(
//			'accessControl - login', // perform access control for CRUD operations			
//		);
//	}
//
//	public function accessRules() {
//		//echo mTools::getUserIp();
//		if (in_array(mTools::getUserIp(), $this->ips)) {
//			return array(
//				array('allow',
//					'ips' => $this->ips
//				),
////				array('deny',
////					'ips' => array('*'),
////				),
//			);
//		} else {
//			return array(
//				array('allow', 'users' => array('@')),
//				array('deny',
//					'users' => array('*'),
//				),
//			);
//		}
//	}

    public function setValue($id = 0) {
        $sql = "SELECT r.\"reviewId\", rs.\"ratingSum\" FROM {{reviews}} r, {{_rev2rate}} rs WHERE r.\"reviewId\" = rs.\"reviewId\" AND r.\"itemId\" = '{$id}' AND r.\"itemType\" = 'model'";
        $ss = Yii::app()->db->getCommandBuilder()->createSqlCommand($sql)->queryAll();
        foreach ($ss as $s)
            $this->value += $s['ratingSum'];
        return count($ss) == 0 ? 0 : round($this->value / count($ss));
    }

    public function getValue($id = 0) {
        $sql = "SELECT r.\"reviewId\", rs.\"ratingSum\" FROM {{reviews}} r, {{_rev2rate}} rs WHERE r.\"reviewId\" = rs.\"reviewId\" AND r.\"itemId\" = '{$id}' AND r.\"itemType\" = 'model'";
        $ss = Yii::app()->db->getCommandBuilder()->createSqlCommand($sql)->queryAll();
        return count($ss);
    }

    protected function beforeAction($event) {

//        $ips = array('5.45.192.72', '216.152.250.148','54.247.187.118');
        $ip = mTools::getUserIp();
//        if (in_array($ip, $ips))
//            die('IP address locked');
//        echo Yii::app()->request->pathInfo;
//        if (empty($_POST)) {
//            Yii::app()->session['sendToClaris'] = '';            
//        }
        if (Yii::app()->request->isPostRequest && !empty($_POST) && Yii::app()->controller->module->name != 'admin') {
            $allowUrls = array('main/ajax/getContacts', 'online-pay', 'main/ajax/login', 'main/ajax/logout', 'main/ajax/loadAudio', 'main/ajax/modelsSort');
            $hash = md5(serialize($_POST) . Yii::app()->request->pathInfo);
            if (!in_array(Yii::app()->request->pathInfo, $allowUrls))
                if (isset(Yii::app()->session['sendToClaris']) && !empty(Yii::app()->session['sendToClaris'])) {
                    $data = json_decode(Yii::app()->session['sendToClaris'], true);
                    if ((time() - $data['time']) < 60 * 10 && $data['hash'] == $hash) {
                        $_POST = null;
                        $m = array('response' => 'success', 'message' => array('title' => 'Ваша заявка принята', 'desc' => 'Вы уже отправляли такую заявку,<br /> пожалуйста дождитесь звонка от менеджеров.'));
                        echo json_encode($m);
                        exit;
                    }
                }
            Yii::app()->session['sendToClaris'] = json_encode(array('time' => time(), 'hash' => $hash));
            if (Yii::app()->controller->module->id != 'admin' && Yii::app()->params['FormSendLimit']['enabled'] && isset(Yii::app()->session['formSend']) && time() - Yii::app()->session['formSend'] < Yii::app()->params['FormSendLimit']['limitTime'] && !in_array(Yii::app()->request->pathInfo, $allowUrls)) {
                $_POST = null;
                return true;
            }

            $data = array(
                'form_id' => null,
                'form_name' => 'form',
                'form_ip' => $ip,
                'form_user' => Yii::app()->user->isGuest ? '0' : Yii::app()->user->name->userId,
                'form_datas' => json_encode($_POST),
                'form_dt' => date("Y-m-d H:i:s", time())
            );
            Yii::app()->db->getCommandBuilder()->createInsertCommand('{{requests}}', $data)->execute();
            Yii::app()->session['formSend'] = time();
        }

        Yii::app()->clientScript->registerCoreScript('yiiactiveform');
        if (Yii::app()->request->isAjaxRequest)
            return true;

        // Yii::app()->session['test'] = 's dfsd fds fsd fsd sdf sdf';
//        echo Yii::app()->session['test'];
//		print_r(Yii::app()->session['userRegion']);
//        $ip = mTools::getUserIp();
        if (!isset(Yii::app()->session['userRegion'])) {           // echo 'dsfsdf';exit;
            $regionIDS = [];
            foreach (Yii::app()->params['regions'] as $region) {
                if ($region['regionId'] == 1)
                    $region['regionTitle'] = 'Москва';
                $regionIDS[$region['regionTitle']] = $region['regionId'];
            }
            //$regionIDS = array('Москва' => 1, 'Санкт-Петербург' => 2, 'Нижний Новгород' => 3, 'Екатеринбург' => 4, 'Новосибирск' => 5, 'Казань' => 6);
            Yii::import('ext.ipgeobase.IPGeoBase');
            $gb = new IPGeoBase();
            $data = $gb->getRecord($ip);
            if (!$data) {
                Yii::app()->session['userRegion'] = [
                    'country' => 'Не определена',
                    'region' => 'Москва',
                    'city' => 'Москва и МО',
                    'id' => 1,
                ];
            } else {
                if (isset($data['city']) && array_key_exists($data['city'], $regionIDS)) {
                    Yii::app()->session['userRegion'] = [
                        'country' => 'Не определена',
                        'region' => isset($data['region']) ? $data['region'] : 'Москва',
                        'city' => isset($data['city']) ? $data['city'] : 'Москва',
                        'id' => isset($data['city']) ? $regionIDS[$data['city']] : 1,
                    ];
                } else {
                    Yii::app()->session['userRegion'] = [
                        'country' => 'Не определена',
                        'region' => 'Москва',
                        'city' => 'Москва и МО',
                        'id' => 1,
                    ];
                }
            }
        }
        if (!isset(Yii::app()->session['remoteAddr']) || Yii::app()->session['remoteAddr'] != $ip) {
            //$data = mTools::getRegion();
            $country = 'Не определена';
            $region = 'Не определен';
//			Yii::app()->db->getCommandBuilder()->createSqlCommand("select insert_visitor('{$country}','{$region}');")->execute();

            Yii::app()->session['remoteAddr'] = $ip;
        }
        return TRUE;
    }

    public static function getUser($id, $attr) {
        return Users::model()->findByPk($id)->$attr;
    }

    public static function numberFormat($value, $decimals = 0, $decimalSeparator = ' ', $thousandSeparator = ' ') {
        return number_format($value, $decimals, $decimalSeparator, $thousandSeparator);
    }

}
